package main

import (
	"fmt"
	"unicode/utf8"
)

func main() {
	// 所见即所得
	var s string = `         ,_---~~~~~----._
    _,,_,*^____      _____*g*\"*,--,
   / __/ /'     ^.  /      \ ^@q   f
  [  @f | @))    |  | @))   l  0 _/
   \/   \~____ / __ \_____/     \
    |           _l__l_           I
    }          [______]           I
    ]            | | |            |
    ]             ~ ~             |
    |                            |
     |                           |`
	fmt.Println(s)

	// 获取字符串的字节长度，并打印每个字节的十六进制形式
	var s1 = "中国人"
	fmt.Printf("length of s = %d\n", len(s1)) // 9 （字节长度，并非字符长度！！）

	for i := 0; i < len(s1); i++ {
		fmt.Printf("0x%x ", s1[i]) // 0xe4 0xb8 0xad 0xe5 0x9b 0xbd 0xe4 0xba 0xba
	}
	fmt.Println()

	// 获取字符串的字符长度，并打印每个字符
	var s2 = "中国人"
	fmt.Println("character length of s2 is", utf8.RuneCountInString(s2)) // 3

	// i 是组成每个字符的一组字节的收个字节的索引值
	for i, c := range s2 {
		fmt.Printf("index-%d, 0x%x %s\n", i, c, string(c))
		// index-0, 0x4e2d 中
		// index-3, 0x56fd 国
		// index-6, 0x4eba 人
	}
	fmt.Println()

	s3 := "雨痕\x61\142\u0041"

	bs := []byte(s3)
	rs := []rune(s3)

	fmt.Printf("%X, %d\n", s3, len(s3))
	fmt.Printf("%X, %d\n", bs, utf8.RuneCount(bs))
	fmt.Printf("%U, %d\n", rs, utf8.RuneCountInString(s3))
	for _, v := range s3 {
		fmt.Println(string(v))
	}

}
